package util.db;

import javax.sql.DataSource;
import java.sql.*;
import java.util.Properties;
import com.alibaba.druid.pool.DruidDataSourceFactory;
/**
 * 连接池工具类
 *         1)创建私有静态数据源成员变量DataSource ds
 *         2)在静态代码块中创建连接池
 *         a)创建属性对象
 *         b)从类路径下加载属性文件，得到输入流对象
 *         c)通过工厂类创建一个数据源
 *
 *         3)创建公有的得到数据源的方法getDataSource()
 *         4)创建得到连接对象的方法 getConnection()
 *         5)创建释放资源的方法 close()
 */
/**
 * 连接池的工具类
 * @author lenovo
 */
public class DataSourceUtil {

    /**
     * 创建一个成员变量
     */
    private static DataSource ds;
    /**
     * 加载的代码写在静态代码块中
     */
    static {
        try {
            Properties info = new Properties();
            //加载类路径下，即src目录下的druid.properties这个文件
            info.load(DataSourceUtil.class.getResourceAsStream("./dataBase.properties"));

            //读取属性文件创建连接池
            ds = DruidDataSourceFactory.createDataSource(info);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 得到数据源
     */
    public static DataSource getDataSource() {
        return ds;
    }
    /**
     * 得到连接对象
     */
    public static Connection getConnection() {
        try {
            return ds.getConnection();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 释放资源
     */
    public static void close(Connection conn, Statement stmt, ResultSet rs) {
        if (rs!=null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (stmt!=null) {
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (conn!=null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    public static void close(Connection conn, Statement stmt) {
        close(conn, stmt, null);
    }
}

